﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PresentacionWindows.Base;
using Negocio.Generico;
using Negocio.View;
using Integra.Comun;
using System.IO;

namespace PresentacionWindows
{
    public partial class frmRenglonDocumentacion : FormBase
    {
        #region Atributos

        private bool bEdicion = false;

        private bool consulta = false;

        private int? coDocumenactionReqEntrega;

        private RenglonDocumentacionDTO objeto;

        private List<DocumentacionReqDTO> listaDocumentos = new List<DocumentacionReqDTO>();

        private DocumentacionReqEntregaDTO objetoActual = null;

        private List<int> listaNotas;

        #endregion

        #region propiedades


        public bool Consulta
        {
            get { return consulta; }
            set { consulta = value; }
        }



        public bool BEdicion
        {
            get { return bEdicion; }
            set { bEdicion = value; }
        }


        #endregion

        #region  Incializacion,Constructor,etc


        public frmRenglonDocumentacion(RenglonDocumentacionDTO filtro, bool esConsulta)
        {
            Consulta = esConsulta;
            objeto = filtro;
            InitializeComponent();
            this.grdDocumentos.SelectionChanged -= new System.EventHandler(this.grdDocumentos_SelectionChanged);
            DsToBinding();

            if (Consulta)
            {
                foreach (Control crtl in this.Controls)
                {
                    crtl.Enabled = false;
                }
                btnCerrar.Enabled = true;
            }

            this.grdDocumentos.SelectionChanged += new System.EventHandler(this.grdDocumentos_SelectionChanged);
        }
        #endregion

        #region funciones propias

        private void DsToBinding()
        {

            //Datos generales
            this.txtNombre.Text = this.objeto.NombreAlumno;
            this.txtApellido1.Text = objeto.Apellido1Alumno;
            this.txtApellido2.Text = objeto.Apellido2Alumno;
            this.txtDNI.Text = objeto.DniAlumno;
            if (objeto.FchEntrega == null && objeto.FchEntrega == DateTime.MinValue)
            {
                this.fchEntrega.Value = DateTime.Parse(objeto.FchEntrega.ToString());
            }
            else
            {
                this.fchEntrega.Value = DateTime.Now;
            }

            //Para cada uno de los registros cargamos los datos de las practicas entregadas


            DocumentacionReqEntregaView vista = DocumentacionReqEntregaView.GetInstance();
            DocumentacionReqEntregaDTO filtro = new DocumentacionReqEntregaDTO();
            filtro.CoRenglonDocumentacion = objeto.CoRenglonDocumentacion;
            DataTable dt = vista.GetDocumentacionReqEntregaView(filtro).Table;

            grdDocumentos.DataSource = dt;
            grdDocumentos.Refresh();

            int contador = 1;
            foreach (DataRow dr in dt.Rows)
            {
                TabPage tb = new TabPage();
                tb.Text = "Práctica " + contador.ToString();
                //tcDocumentos.TabPages.Add(tb);
            }


            //Cargamos los combos
            //ControlDatos.CargarCombo(cboTipoRenglon, typeof(TipoRenglon), TipoCargaCombo.Normal);

            //if (bEdicion)
            //{
            //    RenglonView vista = RenglonView.GetInstance();
            //    RenglonDTO filtro = new RenglonDTO();
            //    filtro.CoRenglon = CodigoRenglon;
            //    DataTable dt = vista.GetViewRenglon(filtro).Table;

            //    if (dt.Rows.Count == 1)
            //    {
            //        DataRow dr = dt.Rows[0];
            //        this.txtNombre.Text = dr["NOMBRE"].ToString();
            //        this.cboTipoRenglon.SelectedValue = Int32.Parse(dr["CODIGOTIPORENGLON"].ToString());
            //        this.dtFchCreacion.Value = Convert.ToDateTime(dr["FECHACREACION"].ToString());
            //        if (bRequerido)
            //        {
            //            this.fchEntrega.Value = Convert.ToDateTime(dr["FECHAREQUERIMIENTO"].ToString());
            //        }
            //        this.chkPublica.Checked = Convert.ToBoolean(dr["PUBLICO"].ToString());
            //        this.rtcDescripcion.Text = dr["DESCRIPCION"].ToString();
            //    }

            //    //Carga de los documentos
            //    RecargaGrid();
            //}

        }

        private void BindingToDs()
        {
            //RenglonDTO obj = new RenglonDTO();
            //if (bEdicion) { obj.CoRenglon = CodigoRenglon; }
            //obj.Nombre = this.txtNombre.Text;
            //obj.CoTipoRenglon = Int32.Parse(this.cboTipoRenglon.SelectedValue.ToString());
            //obj.CoAsignatura = this.CoAsignatura;
            //obj.Descripcion = this.rtcDescripcion.Text;
            //obj.Publico = this.chkPublica.Checked;
            //obj.FchRequerimiento = (DateTime)this.fchEntrega.Value;
            //obj.FchCreacion = (DateTime)this.dtFchCreacion.Value;

            //GenericaView vista = GenericaView.GetInstance();
            //if (!bEdicion)
            //{
            //    if (vista.Inserta(obj))
            //    {
            //        MessageBox.Show("Se ha insertado de forma correcta el renglon");
            //    }
            //}
            //else 
            //{
            //    if (vista.Actualiza(obj))
            //    {
            //        MessageBox.Show("Se ha actualizado de forma correcta el renglon");
            //    }
            //}

            //if (!bEdicion)
            //{
            //    //Guardamos los documentos que se hayan podido añadir a la lista
            //    foreach (DocumentacionReqDTO documento in listaDocumentos) 
            //    {
            //        if (!vista.Inserta(documento)) 
            //        {
            //            break;
            //        }
            //    }
            //}
            //this.Close();
        }

        private DocumentacionReqDTO BindingToDsDocumento()
        {
            DocumentacionReqDTO obj = null;
            //try
            //{
            //    obj = new DocumentacionReqDTO();
            //    obj.Descripcion = this.txtDescripcion.Text;
            //    obj.NombreDoc = this.txtNombreDocumento.Text;

            //    //ahora vamos a rellenar el fichero
            //    FileStream fs = new FileStream(this.txtrutaDocumento.Text, FileMode.Open);
            //    byte[] vector = new byte[fs.Length];
            //    fs.Write(vector, 0, (int)fs.Length);
            //    obj.Contenido = vector;
            //    obj.Path = this.txtrutaDocumento.Text;
            //    if (CodigoRenglon != Int32.MinValue) 
            //    {
            //        obj.CoRenglon = CodigoRenglon;
            //    }
            //}
            //catch (Exception ex)
            //{
            //    this.MostrarExcepcion(ex);
            //}
            return obj;
        }

        /// <summary>
        /// Valida si se han rellenado todos los datos del documento
        /// </summary>
        /// <returns></returns>
        private bool ValidaDocumento()
        {
            if (this.txtNombre.Text != "" && this.txtApellido1.Text != "" && this.txtApellido2.Text != "")
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        private void RecargaGrid()
        {
            //DocumentacionReqDTO filtro = new Renglon();
            //filtro.CoRenglon = CodigoRenglon;
            //RecargaGrid(filtro);
        }

        /// <summary>
        /// Método que recarga el grid por completo 
        /// </summary>
        private void RecargaGrid(DocumentacionReqDTO filtro)
        {
            try
            {
                DocumentacionReqView vista = DocumentacionReqView.GetInstance();
                DocumentacionReqDTO dto;
                if (filtro == null)
                {
                    dto = new DocumentacionReqDTO();
                }
                else
                {
                    dto = filtro;
                }

                DataTable dt = vista.GetDocumentacionReqView(dto).Table;

                foreach (DataRow dr in dt.Rows)
                {
                    listaNotas.Add(0);
                }
                this.grdDocumentos.DataSource = null;
                this.grdDocumentos.DataSource = dt;
                this.grdDocumentos.Refresh();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
        }

        /// <summary>
        /// Funcion que almacena el documento en la lista
        /// </summary>
        private void BindingToListaDocumento()
        {
            try
            {
                RenglonDocumentacionDTO objeto = new RenglonDocumentacionDTO();
            }
            catch (Exception ex)
            {
                this.MostrarExcepcion(ex);
            }
        }

        /// <summary>
        /// Funcion que limpia todos los controles relativos al documento
        /// </summary>
        private void LimpiaControlesDoc()
        {
            //this.txtNombreDocumento.Text = "";
            //this.txtrutaDocumento.Text = "";
            //this.txtDescripcion.Text = "";
        }

        /// <summary>
        /// Funcion qeu devuelve el dto de la fila seleccionada dentro del grid.
        /// </summary>
        /// <returns></returns>
        private DocumentacionReqEntregaDTO RellenaBean()
        {
            DocumentacionReqEntregaDTO objetoEdicion = null;
            try
            {
                DataGridViewRow dr = grdDocumentos.SelectedRows[0];

                objetoEdicion = new DocumentacionReqEntregaDTO();

                objetoEdicion.CoDocumentacionReqEntrega = dr.Cells["CODIGODOCUMENTACIONREQENTREGA"].Value != null ? Int32.Parse(dr.Cells["CODIGODOCUMENTACIONREQENTREGA"].Value.ToString()) : Int32.MinValue;
                objetoEdicion.Contenido = dr.Cells["CONTENIDO"].Value != null ? (byte[])dr.Cells["CONTENIDO"].Value : null;
                objetoEdicion.CalificacionEsp = dr.Cells["CALIFICACIONESP"].Value != null ? Double.Parse(dr.Cells["CALIFICACIONESP"].Value.ToString()) : Double.MinValue;
                objetoEdicion.CoRenglonDocumentacion = dr.Cells["CODIGORENGLONDOCUMENTACION"].Value != null ? Int32.Parse(dr.Cells["CODIGORENGLONDOCUMENTACION"].Value.ToString()) : Int32.MinValue;
                objetoEdicion.Descripcion = dr.Cells["DESCRIPCION"].Value != null ? (dr.Cells["DESCRIPCION"].Value.ToString()) : null;
                objetoEdicion.NombreDoc = dr.Cells["NOMBREDOC"].Value != null ? (dr.Cells["NOMBREDOC"].Value.ToString()) : null;
                objetoEdicion.Path = dr.Cells["PATH"].Value != null ? (dr.Cells["PATH"].Value.ToString()) : null;
            }
            catch (Exception ex)
            {
                return null;
                MessageBox.Show("Ha habido un problema cargando el valor de la documetnacion entregada. Excepcion:" + ex.Message);
            }
            return objetoEdicion;

        }


        #endregion

        #region Eventos

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            BindingToDs();
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            //Stream flujo = (Stream)e.Argument;
            //byte[] buffer = new byte[flujo.Length]; // OJO: esto consume memoria.
            try
            {

            }
            catch (Exception ex)
            {
                MessageBox.Show("Error en la carga de documento. Excepcion: " + ex.Message);
            }
        }


        private void btnGuardaDocumento_Click(object sender, EventArgs e)
        {
            if (ValidaDocumento())
            {
                DocumentacionReqDTO obj = BindingToDsDocumento();
                GenericaView objGen = GenericaView.GetInstance();
                if (bEdicion)
                {
                    if (objGen.Inserta(obj))
                    {
                        MessageBox.Show("Se ha insertado correctamente el documento");
                    }
                }
                else
                {
                    listaDocumentos.Add(BindingToDsDocumento());
                    //BDocumentosAñadidos=true;
                }
                LimpiaControlesDoc();
                RecargaGrid();
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            try
            {

                DocumentacionReqDTO filtro = new DocumentacionReqDTO();
                filtro.CoDocumentacionReq = Int32.Parse(this.grdDocumentos.SelectedRows[0].Cells["CO_DOCUMENTOREQ"].ToString());
                GenericaView vista = GenericaView.GetInstance();
                if (vista.Elimina(filtro))
                {
                    MessageBox.Show("Se ha eliminado correctamente la asignatura");
                    RecargaGrid();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error al eliminar el documento.Excepcion:" + ex.Message);
            }
        }

        private void btnCerrarRenglon_Click(object sender, EventArgs e)
        {

            this.Close();
        }

        private void grdDocumentos_SelectionChanged(object sender, EventArgs e)
        {
            try
            {
                if (grdDocumentos.SelectedRows.Count == 1)
                {
                    objetoActual = RellenaBean();
                    if (objetoActual != null)
                    {
                        txtNombrePractica.Text = objetoActual.NombreDoc;
                        txtDescripcion.Text = objetoActual.Descripcion;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ha sido imposible cargar los documentos");
            }
        }

        #endregion


        #region Temporal Pruebas

        private void button1_Click(object sender, EventArgs e)
        {
            TabPage pagina = new TabPage();
            //tcDocumentos.TabPages.Add(pagina);
        }

        #endregion




    }
}
